package com.tedu._04mybatis.mapper;

import com.tedu._04mybatis.pojo.Weibo;
import com.tedu._04mybatis.pojo.WeiboVO1;
import com.tedu._04mybatis.pojo.WeiboVO2;
import com.tedu._04mybatis.pojo.WeiboVO3;
import org.apache.ibatis.annotations.*;

import java.util.List;

@Mapper
public interface WeiboMapper {

    int insertWeibo(Weibo weibo);

    int deleteWeiboById(Integer id);

    int updateWeiboById(Weibo weibo);

    /**
     *  根据微博id查询微博信息
     *  传统用JDBC
     *
     *  try(Connection connection = DBUtil.getConnection()){
     *      String sql = "SELECT id,content,created,user_id "+
     *                   "FROM weibo "+
     *                   "WHERE id=?";
     *      PreparedStatement ps = connection.prepareStatement(sql);
     *      ps.setInt(1,id);
     *      ResultSet rs = ps.executeQuery();
     *      if(rs.next()){
     *          Weibo weibo = new Weibo();
     *          weibo.setId(rs.getInt("id"));
     *          weibo.setContent(rs.getString("content"));
     *          ...
     *          return weibo;
     *      }
     *  }catch(...){
     *      ...
     *  }
     *  return null;
     *
     *  MyBatis在进行查询后，会将查询的结果设置到方法返回值要求的对象上
     *  但是注意一点，查询的结果集字段名要和对象属性名一致，MyBatis才会将查询的字段值
     *  设置到对应属性上。如果遇到字段名与属性名不一致时，应当在查询语句中为该字段取别名
     *  保证别名与类中该属性名字一致。
     *
     *  例如下面的查询
     *  表中content字段和Weibo类中的content属性名一致，那么可以被直接设置
     *  表中user_id字段和Weibo类中的userId属性名不一致，那么需要为user_id字段取别名userId
     *
     *
     *  当我们方法定义返回值为一个具体对象时，那么查询语句应当只能查询出【一条记录】，
     *  否则会抛出异常，告知结果集查询出多条记录:
     *  org.mybatis.spring.MyBatisSystemException: Expected one result (or null) to be returned by selectOne(), but found: 2
     */
    Weibo selectWeiboById(Integer id);

    List<Weibo> selectAllWeibo();

    WeiboVO1 selectWeiboVO1ById(Integer id);
    /*
        查看所有微博的内容，创建时间，用户id
     */
    List<WeiboVO2> selectAllWeiboVO2();

    int dynamicUpdateWeibo(Weibo weibo);

    int dynamicDeleteWeibo(Integer[] ids);

    int dynamicDeleteWeibo2(List<Integer> ids);

    int countWeibo();

    WeiboVO3 selectWeiboVO3ById(Integer id);

    List<WeiboVO3>selectAllWeiboVO3();
}









